/*
 * main.c
 *
 *  Created on: 25 de Mai de 2011
 *      Author: pedro
 */

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

struct Docente{
	char* nomeDocente;
	int codigoDocente;
	int ano;
};

static int callback_contagem(int *p_num_docentes, int argc, char **argv, char **azColName) {
	int i;
	for (i = 0; i < argc; i++) {
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
		*p_num_docentes = atoi(argv[0]);
	}
	printf("\n");
	return 0;
}

static int callback(struct Docente** p_docente, int argc, char **argv, char **azColName) {
	int i;
	for (i = 0; i < argc; i++) {
		//printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");


	}
	//printf("\n");
	strcpy( (*p_docente)->nomeDocente, argv[0]);
	(*p_docente)->ano = atoi(argv[2]);
	(*p_docente)->codigoDocente = atoi(argv[1]);

	(*p_docente)++;

	return 0;
}

int main(int argc, char **argv) {
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	char* query = "select * from docentes";
	char* query_contagem = "select count(*) from docentes";
	int numero_docentes;
	struct Docente* p_docente;
	struct Docente* p_primeiro_campo_docente;
	int i;

	rc = sqlite3_open("/home/pedro/Codigo/LP/C/Rebides/BaseDadosrebides.db", &db);

	rc = sqlite3_exec(db, query_contagem, callback_contagem, &numero_docentes, &zErrMsg);
	printf("Numero de docentes: %d\n", numero_docentes);

	/* reserva de memoria */
	p_docente = (struct Docente*) malloc(numero_docentes * sizeof(struct Docente));
	for(i=0; i < numero_docentes; i++){
		p_docente[i].nomeDocente = (char*) malloc(100 * sizeof(char));
	}

	p_primeiro_campo_docente = p_docente;
	rc = sqlite3_exec(db, query, callback, &p_docente, &zErrMsg);
	p_docente = p_primeiro_campo_docente;
	for(i=0; i < numero_docentes; i++){
		printf("%d %d %s\n", p_docente[i].ano, p_docente[i].codigoDocente,
				p_docente[i].nomeDocente);
	}

	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	}
	sqlite3_close(db);

	return 0;
}
